In certain data processing applications, multiple devices, such as processor cores and input/output interfaces, may require access to shared resources such as a memory. A resource arbiter can be implemented to arbitrate access to the shared resources. Typically, the arbiter selects a next device to allow to forward a resource request based on a predetermined routine, such as a round-robin selection among all of the devices.